/**
 * 构造N*N的矩阵，从1到N^2。
 * 权值为相邻元素之和，四邻域。
 * 问权值最大是多少。
 * 中间元素要计算4次，边元素计算3次，角元素计算2次。
 * 因此1、2、3、4必然放在四角，
 * 然后从[5, 4(N-2)+4]放在四边
 * 剩下放中间。
 * 直接用等差数列求和公式计算即可
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;


using llt = long long;
using Real = double;
using vi = vector<int>;
using pii = pair<int, int>;

llt const MOD = 1E9 + 7;

llt N;

llt proc(){
    if(2 == N) return 20;

    llt ans = (1 + 2 + 3 + 4) * 2;
    llt tmp = (5 + 4 * (N - 2) % MOD + 4) % MOD * (4 * (N - 2) % MOD) % MOD * ((MOD + 1) / 2) % MOD * 3 % MOD;
    ans = (ans + tmp) % MOD;

    tmp = (4 * (N - 2) % MOD + 5 + N * N % MOD) % MOD * (N * N % MOD - (4 * (N - 2) % MOD + 4)) % MOD * ((MOD + 1) / 2) % MOD * 4 % MOD;
    ans = (ans + tmp) % MOD;
    if(ans < 0) ans += MOD;
    return ans;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--){
        cin >> N;
        cout << proc() << "\n";
    }
    return 0;
}